//
//  WYEmoticonTools.swift
//  WYWeibo
//
//  Created by wangyi on 16/7/27.
//  Copyright © 2016年 wangyi. All rights reserved.
//

import UIKit

//定义页数 表情的个数
let numberOfPage = 20
//读取表情工具专用类  解析 bundle 用法
class WYEmoticonTools: NSObject {
    //设置单例全局访问点
    static let shareTools = WYEmoticonTools()
    

    //构造函数私有化
    private override init() {
        super.init()
        print(defaultEmoticonArray.count)
        print(emojiEmoticonArray.count)
        print(lxhEmoticonArray.count)
        print(defaultEmoticonArray)
    }
    //创建 bundle 对象
    private lazy var emoticonBundle: NSBundle = {
    
        //获取路径
        let path = NSBundle.mainBundle().pathForResource("Emoticons", ofType: "bundle")!
        //穿件 bundle 对象
        let bundle = NSBundle(path: path)!
        return bundle
    }()
    //读取默认表情数据 在这里 bundle 默认 contents 文件夹 只需要下面的文件夹 和plist 文件名
    private lazy var defaultEmoticonArray: [WYEmoticon] = {
        return self.loadEmoticonWithPath("default/info.plist")
    }()
    private lazy var emojiEmoticonArray: [WYEmoticon] = {
    
        return self.loadEmoticonWithPath("emoji/info.plist")
    }()
    private lazy var lxhEmoticonArray: [WYEmoticon] = {
    
        return self.loadEmoticonWithPath("lxh/info.plist")
    }()
    
    //准备表情视图需要的数据 这个的意思就和 临时数组的意思一样 为外界提供数据接口 
    lazy var allEmticonArray:[[[WYEmoticon]]] = {
    
        return [
        
            self.pagesWithEmoticons(self.defaultEmoticonArray),
            self.pagesWithEmoticons(self.emojiEmoticonArray),
            self.pagesWithEmoticons(self.lxhEmoticonArray)
        ]
    }()
    
    //根据子路径读取表情的通用方法  返回是一个数组  这个方法就是解析 plist 使用 先建立模型 一切在模型的基础上处理 返回的是个数组
    private func loadEmoticonWithPath(subPath: String) -> [WYEmoticon] {
        
        //获取 bundle 对象 这个是刚刚懒加载的bundle
        let bundle: NSBundle = self.emoticonBundle
        //获去 bundle 中 plist 文件
        let path = bundle.pathForResource(subPath, ofType: nil)!
        //获取 pilst 文件的内容
        let emoticonDicArray = NSArray(contentsOfFile: path)!
        // 定义可变数组
        var tempArray = [WYEmoticon]()
        //遍历数组转模型
        for emoticonDic in emoticonDicArray {
        
            let emoticon = WYEmoticon(dic: emoticonDic as! [String : AnyObject])
            //如果是图片需要处理路径
            if emoticon.type == "0" {
                 let lastPath = (path as NSString).stringByDeletingLastPathComponent
                 emoticon.path = lastPath + "/" + emoticon.png!
                
                print("====                    ===\(emoticon.path)")
                print(emoticon.png)
                
            }
            tempArray.append(emoticon)
        }
        
        return tempArray
        
    }
    
    //吧表情数主拆分为一个二维数组  也就 [WYEmoticon]数组内容分成几组 [[WYEmoticon]]
    //在我们班需要的数组里面 每组有20 个数据 
    private func pagesWithEmoticons(emoticon: [WYEmoticon]) -> [[WYEmoticon]] {
        
        var tempArray = [[WYEmoticon]]()
        //计算页数
        let pageCount = (emoticon.count - 1) / numberOfPage + 1
        for i in 0..<pageCount {
        
            //截取的索引 截取的元素位置
            let loc = i * numberOfPage
            //截取的个数 对应元素的个数
            var len = numberOfPage
            
            //如果截取长度不够 则渠道剩余个数
            if loc + len > emoticon.count {
            
                len = emoticon.count - loc
            }
            //将截取数组中的元素 添加在数组中 参数是 元素位置 和元素个数
            let subArray = (emoticon as NSArray).subarrayWithRange(NSMakeRange(loc, len)) as! [WYEmoticon]
            
            tempArray.append(subArray)
        }
        return tempArray
    }
}
